home *** CD-ROM | disk | FTP | other *** search
- DECLARE FUNCTION GetMSCDEX% ()
- DEFINT A-Z
-
- ' Definitions for the register structure passed to QINT
-
- TYPE Registers
- ax AS INTEGER
- bx AS INTEGER
- cx AS INTEGER
- dx AS INTEGER
- bp AS INTEGER
- si AS INTEGER
- di AS INTEGER
- ds AS INTEGER
- es AS INTEGER
- flags AS INTEGER
- END TYPE
-
- ' Public routines
-
- DECLARE FUNCTION GetDriveCount ()
- DECLARE FUNCTION GotMSCDEX ()
- DECLARE FUNCTION IsCDROMDrive (drive%)
-
- COMMON SHARED regs AS Registers
- DIM SHARED code(55) 'array to hold QINT code
-
- COLOR 15, 1
- CLS
- DEF SEG = VARSEG(code(0)) ' point to QINT code
- BLOAD "QINT.OVL", 0 ' load QINT code
-
- PRINT : PRINT
- IF GetMSCDEX = 0 THEN
- PRINT "Microsoft CD-ROM Extensions not loaded !"
- END
- END IF
-
- FOR drv = 0 TO GetDriveCount - 1
- PRINT CHR$(9) + CHR$(drv + ASC("A")) + ": ";
- IF IsCDROMDrive(drv) THEN
- PRINT "This is a CD-ROM drive"
- ELSE
- PRINT "This is a plain-vanilla drive"
- END IF
- NEXT
-
-
- '----------------------------------------------------------------------------
- ' Name: GetDriveCount
- ' Purpose: Return number of logical drives known to DOS
- '----------------------------------------------------------------------------
- FUNCTION GetDriveCount
-
- ' Call interrupt $19 to get current drive letter
-
- regs.ax = &H1900 ' specify get drive letter
- DEF SEG = VARSEG(code(0)) ' point to QINT code
- CALL absolute(&H21, regs, 0) ' get drive number in AL
-
- ' Now set drive letter to current, in order to get drive count
-
- regs.dx = regs.ax
- regs.ax = &HE00
- CALL absolute(&H21, regs, 0) ' get drive count in AL
- GetDriveCount = regs.ax AND 255
- DEF SEG
- END FUNCTION
-
- '----------------------------------------------------------------------------
- ' Name: GetMSCDEX
- ' Purpose: Determine whether or not MSCDEX is loaded
- '----------------------------------------------------------------------------
- FUNCTION GetMSCDEX
- ' Call multiplex $2F/1500 to see if MSCDEX present
-
- regs.ax = &H1500 ' specify install check
- regs.bx = 0 ' pre-init to zero
- DEF SEG = VARSEG(code(0)) ' point to QINT code
- CALL absolute(&H2F, regs, 0) ' get result in BX register
-
- GetMSCDEX = regs.bx AND 255
- DEF SEG
- END FUNCTION
-
- '----------------------------------------------------------------------------
- ' Name: IsCDROMDrive
- ' Purpose: Determine if specified drive is a CD-ROM
- '----------------------------------------------------------------------------
- FUNCTION IsCDROMDrive (drive%)
- ' Call multiplex $2F/150B to check drive status
-
- regs.ax = &H150B ' specify drive check
- regs.cx = drive% ' Cx = drive number
- DEF SEG = VARSEG(code(0)) ' point to QINT code
- CALL absolute(&H2F, regs, 0) ' get result in AX register
-
- IF regs.ax <> 0 THEN
- IsCDROMDrive = 1
- ELSE
- IsCDROMDrive = 0
- END IF
-
- DEF SEG
- END FUNCTION
-
-